Programmable logic devices (“PLDs”) are a well-known type of integrated circuit that can be programmed to perform specified logic functions. One type of PLD, the field programmable gate array (“FPGA”), typically includes an array of programmable tiles. These programmable tiles can include, for example, input/output blocks (“IOBs”), configurable logic blocks (“CLBs”), dedicated random access memory blocks (“BRAMs”), multipliers, digital signal processing blocks (“DSPs”), processors, clock managers, delay lock loops (“DLLs”), and so forth. Notably, as used herein, “include” and “including” mean including without limitation.
One such FPGA is the Xilinx Virtex™ FPGA available from Xilinx, Inc., 2100 Logic Drive, San Jose, Calif. 95124. Another type of PLD is the Complex Programmable Logic Device (“CPLD”). A CPLD includes two or more “function blocks” connected together and to input/output (“I/O”) resources by an interconnect switch matrix. Each function block of the CPLD includes a two-level AND/OR structure similar to those used in Programmable Logic Arrays (“PLAs”) and Programmable Array Logic (“PAL”) devices. Other PLDs are programmed by applying a processing layer, such as a metal layer, that programmably interconnects the various elements on the device. These PLDs are known as mask programmable devices. PLDs can also be implemented in other ways, for example, using fuse or antifuse technology. The terms “PLD” and “programmable logic device” include but are not limited to these exemplary devices, as well as encompassing devices that are only partially programmable.
For purposes of clarity, FPGAs are described below though other types of PLDs may be used. FPGAs may include one or more embedded microprocessors. For example, a microprocessor may be located in an area reserved for it, generally referred to as a “processor block.”
Heretofore, performance of a design instantiated in programmable logic of an FPGA (“FPGA fabric”) using a Peripheral Component Interconnect (“PCI”) Express (“PCIe”) internal to such FPGA was limited to performance of a PCIe design for instantiation in FPGA fabric (“soft core”). Additional details regarding examples of PCIe soft cores are available from Xilinx, Inc. of San Jose, Calif. and are described in “PCI Express PIPE Endpoint LogiCORE Product Specification,” DS321 (v1.1), Apr. 11, 2005 and in “PCI Express Endpoint Cores v3.4 Product Specification,” DS506, Feb. 15, 2007, both available from Xilinx, Inc. Furthermore, area used by such a PCIe soft core was considerable.
PCIe soft cores have been implemented as an “Endpoint” architecture. Target applications for such Endpoint architecture include: test equipment, consumer graphics boards, medical imaging equipment, data communication networks, telecommunication networks, broadband deployments, cross-connects, workstation and mainframe backbones, network interface cards, chip-to-chip and backplane interconnect, crossbar switches, wireless base stations, high bandwidth digital video, and high bandwidth server applications, among other known add-in cards, host bus adapters, and other known applications.
Accordingly, it would be desirable and useful to provide a PCIe Endpoint internal to an FPGA having enhanced performance and reduced area over that of a PCIe soft core instantiated in FPGA fabric.